package ifrn.pds.siem.banco;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import ifrn.pds.siem.ementa.Corpo;
import ifrn.pds.siem.ementa.Ementa;
import ifrn.pds.siem.ementa.Identificacao;
import ifrn.pds.siem.ementa.InfoAdicionais;

public class Pesquisa implements PesquisaDAO {
	private Banco banco;
	
	public Pesquisa(){
		banco = new Banco();
		
	}
		
	public ArrayList<Ementa> pesquisaRapida(String chave) {
		try {
			ArrayList<Ementa> ementas = new ArrayList<Ementa>();
			if(!banco.isConnected())
				banco.conectar();
			Statement statement = banco.conexao.createStatement();
			ResultSet rs = statement.executeQuery("select * from (identificacao i inner join corpo c on i.idEmenta = c.idEmenta) inner join informacoesadicionais ia on  i.idEmenta = ia.idEmenta where ("+
			"curso like '%"+chave+"%' or area like '%"+chave+"%' or periodo like '%"+chave+"%' or ch like '%"+chave +
			"%' or disciplina like '%"+chave+"%' or ementa like '%"+chave+"%' or preRequisitos like '%"+chave+"%'"+
			"or objetivos like '%"+chave+"%' or conteudo like '%"+chave+"%' or procedimentos like '%"+chave+"%'"+
			"or bibliografiaBasica like '%"+chave+"%' or bibliografiaComplementar like '%"+chave+"%' or infoAdicionais like '%"+chave+"%') AND atual = 1");
		
			while(rs.next()){
				Identificacao id = new Identificacao();
				Corpo corpo = new Corpo();
				InfoAdicionais inf = new InfoAdicionais();
				id.setId(rs.getInt(1));
				id.setCurso(rs.getString("curso"));
				id.setArea(rs.getString("area"));
				id.setPeriodo(rs.getString("periodo"));
				id.setCh(rs.getString("ch"));
				id.setDisciplina(rs.getString("disciplina"));
				id.setAno(rs.getInt("ano"));
				id.setAtual(rs.getBoolean("atual"));
				corpo.setTopicos(rs.getString("ementa"));
				corpo.setPreReq(rs.getString("preRequisitos"));
				corpo.setObjetivos(rs.getString("objetivos"));
				corpo.setConteudo(rs.getString("conteudo"));
				corpo.setProcedimentos(rs.getString("procedimentos"));
				corpo.setAvaliacao(rs.getString("avaliacao"));
				inf.setBb(rs.getString("bibliografiaBasica"));
				inf.setBc(rs.getString("bibliografiaComplementar"));
				inf.setInfo(rs.getString("infoAdicionais"));
				Ementa ementa = new Ementa(id, corpo, inf);
				ementas.add(ementa);
			}
			return ementas;
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
	}

	public ArrayList<Ementa> pesquisaSimples(String chave, String op) {
		try {
			ArrayList<Ementa> ementas = new ArrayList<Ementa>();
			if(!banco.isConnected())
				banco.conectar();
			Statement statement = banco.conexao.createStatement();
			ResultSet rs = statement.executeQuery("select * from (identificacao i inner join corpo c on i.idEmenta = c.idEmenta) inner join informacoesadicionais ia on  i.idEmenta = ia.idEmenta"
					+ " where "+ op + " like '%" + chave +"%' AND atual = 1");
			while(rs.next()){
				Identificacao id = new Identificacao();
				Corpo corpo = new Corpo();
				InfoAdicionais inf = new InfoAdicionais();
				id.setId(rs.getInt(1));
				id.setCurso(rs.getString("curso"));
				id.setArea(rs.getString("area"));
				id.setPeriodo(rs.getString("periodo"));
				id.setCh(rs.getString("ch"));
				id.setDisciplina(rs.getString("disciplina"));
				id.setAno(rs.getInt("ano"));
				id.setAtual(rs.getBoolean("atual"));
				corpo.setTopicos(rs.getString("ementa"));
				corpo.setPreReq(rs.getString("preRequisitos"));
				corpo.setObjetivos(rs.getString("objetivos"));
				corpo.setConteudo(rs.getString("conteudo"));
				corpo.setProcedimentos(rs.getString("procedimentos"));
				corpo.setAvaliacao(rs.getString("avaliacao"));
				inf.setBb(rs.getString("bibliografiaBasica"));
				inf.setBc(rs.getString("bibliografiaComplementar"));
				inf.setInfo(rs.getString("infoAdicionais"));
				Ementa ementa = new Ementa(id, corpo, inf);
				ementas.add(ementa);
			}
			//System.out.println(ementas);
			return ementas;
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
	}
	public Ementa pesquisaIndex(int idEmenta) {
		try {
			Ementa ementa = new Ementa();
			if(!banco.isConnected())
				banco.conectar();
			Statement statement = banco.conexao.createStatement();
			ResultSet rs = statement.executeQuery("select * from (identificacao i inner join corpo c on i.idEmenta = c.idEmenta) inner join informacoesadicionais ia on  i.idEmenta = ia.idEmenta"
					+ " where i.idEmenta = "+idEmenta);
			while(rs.next()){
				Identificacao id = new Identificacao();
				Corpo corpo = new Corpo();
				InfoAdicionais inf = new InfoAdicionais();
				id.setId(rs.getInt(1));
				id.setCurso(rs.getString("curso"));
				id.setArea(rs.getString("area"));
				id.setPeriodo(rs.getString("periodo"));
				id.setCh(rs.getString("ch"));
				id.setDisciplina(rs.getString("disciplina"));
				corpo.setTopicos(rs.getString("ementa"));
				corpo.setPreReq(rs.getString("preRequisitos"));
				corpo.setObjetivos(rs.getString("objetivos"));
				corpo.setConteudo(rs.getString("conteudo"));
				corpo.setProcedimentos(rs.getString("procedimentos"));
				corpo.setAvaliacao(rs.getString("avaliacao"));
				inf.setBb(rs.getString("bibliografiaBasica"));
				inf.setBc(rs.getString("bibliografiaComplementar"));
				inf.setInfo(rs.getString("infoAdicionais"));
				ementa = new Ementa(id, corpo, inf);
			}
			return ementa;
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
	}
}
